package com.xkcyy.one.ai.common;

import cn.hutool.core.collection.ListUtil;
import com.xkcyy.one.ai.common.tool.Tool;
import com.xkcyy.one.ai.llm.model.ChatMessage;
import com.xkcyy.one.ai.llm.model.ChatResult;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 工具智能体接口
 * 定义支持工具调用的智能体需要实现的方法
 * 
 * @author AI Assistant
 */
public interface ToolAgent {
    
    /**
     * 注册工具执行器
     * 
     * @param tool 工具执行器
     */
    void registerTool(Tool tool);
    
    /**
     * 注册多个工具执行器
     * 
     * @param tools 工具执行器列表
     */
    void registerTools(List<Tool> tools);
    
//    /**
//     * 执行对话并支持工具调用
//     *
//     * @param prompt 用户提示
//     * @return 对话结果
//     */
//    ChatResult chat(String prompt);
//
//    /**
//     * 执行对话，支持工具调用和历史消息
//     *
//     * @param messages 历史消息
//     * @return 对话结果
//     */
//    ChatResult chat(List<ChatMessage> messages);
//
    /**
     * 执行流式对话并支持工具调用
     *
     * @param prompt 用户提示
     * @return 流式对话结果
     */
    default Flux<ChatResult> chatStream(String prompt) {
        return chatStream(ListUtil.of(ChatMessage.builder().role("user").content(prompt).build()));
    }
    
    /**
     * 执行流式对话，支持工具调用和历史消息
     * 
     * @param messages 历史消息
     * @return 流式对话结果
     */
    Flux<ChatResult> chatStream(List<ChatMessage> messages);
} 